package com.youwatch.concurrency.example.singleton;

import com.youwatch.concurrency.annotations.ThreadSafe;

/**
 * @Author: kss
 * @Description: 单例-饿汉模式-单例实例在类装载时进行创建-写法2
 * @Date: Create in 2019/1/17
 */
@ThreadSafe
public class SingletonHungry2 {

    // 构造方法私有化
    private SingletonHungry2() {
        /*
         * 1、使用饿汉模式私有构造没有太多的处理，不然会造成资源的浪费
         * 2、这个类实例化后一定会被使用，这样不会带来资源的浪费
         */
    }

    static {
        instance = new SingletonHungry2();// 1
    }

    // 单例对象
    private static SingletonHungry2 instance = null;// 2

    // 静态工厂方法
    public static SingletonHungry2 getInstance() {
        return instance;// 3
    }

    // 测试告诉我们在写静态域、静态方法时，要注意顺序；静态代码块都是按照顺序执行的，与普通方法、静态方法不一致
    public static void main(String[] args) {
        // 图中标识顺序-1、2、3 -> null null
        System.out.println(getInstance());
        System.out.println(getInstance());

        // 图中标识顺序-2、1、3 -> 正确 正确

        // 可进行断点调试验证
    }
}
